package com.shujia.wyh.day25;

/*
        假如我们的计算机只有一个 CPU，那么 CPU 在某一个时刻只能执行一条指令，线程只有得到 CPU时间片，也就是使用权，
        才可以执行指令。那么Java是如何对线程进行调用的呢？
        线程有两种调度模型：
            1、分时调度模型   所有线程轮流使用 CPU 的使用权，平均分配每个线程占用 CPU 的时间片
            2、抢占式调度模型   优先让优先级高的线程使用 CPU，如果线程的优先级相同，那么会随机选择一个，
            优先级高的线程获取的 CPU 时间片相对多一些。

        Java使用的是抢占式调度模型。***
        我们在前几个代码中都没有设置优先级，所以我们猜测一定会有一个默认的优先级
        默认的优先级是多少呢？5


        获取线程中的优先级方法：
            public final int getPriority() 返回此线程的优先级。
        设置线程优先级的方法：
            public final void setPriority(int newPriority) 更改此线程的优先级。

        public final static int MIN_PRIORITY = 1; 线程可以拥有的最小的优先级
        public final static int MAX_PRIORITY = 10; 线程可以拥有的最大的优先级


        注意事项：
            1、线程的默认优先级是5
            2、设置优先级的时候，范围是1-10
            3、线程的优先级越高仅仅表示的是获取CPU时间片的机率会高一些，并不能保证一定会先执行。

 */
public class ThreadPriorityDemo {
    public static void main(String[] args) {
        MyPriorityThread t1 = new MyPriorityThread();
        MyPriorityThread t2 = new MyPriorityThread();
        MyPriorityThread t3 = new MyPriorityThread();

        //获取线程的优先
//        int i1 = t1.getPriority();
//        System.out.println(i1);
//        int i2 = t2.getPriority();
//        System.out.println(i2);
//        int i3 = t3.getPriority();
//        System.out.println(i3);

        //设置线程的优先级
//        t1.setPriority(10000);  //IllegalArgumentException 非法的参数异常
//        t2.setPriority(100);
//        t3.setPriority(1);
        t1.setPriority(10);
        t2.setPriority(5);
        t3.setPriority(1);

        t1.setName("小白");
        t2.setName("小黑");
        t3.setName("小蓝");

        t1.start();
        t2.start();
        t3.start();
    }
}
